#ifndef TITLEBAR_H
#define TITLEBAR_H

#include <QHBoxLayout>
#include <QLabel>
#include <QMenuBar>
#include <QPushButton>
#include <QWidget>
#include <qevent.h>
#include <qpoint.h>
#include <qpushbutton.h>


class TitleBar : public QWidget {
    Q_OBJECT
  public:
    TitleBar(QWidget *parent = nullptr);
    ~TitleBar();

    // 保存/获取 最大化前窗口的位置及大小
	  void saveRestoreInfo(const QPoint point, const QSize size);
	  void getRestoreInfo(QPoint& point, QSize& size);

    void setTitleIcon(QString filePath);              // 设置标题栏
    void setHeaderInfor(QString info);                // 设置标题栏自定义信息

  private:
    void paintEvent(QPaintEvent *event);              // 窗口或者控件重绘时
    void mouseDoubleClickEvent(QMouseEvent *event);   // 双击鼠标
    void mousePressEvent(QMouseEvent *event);         // 鼠标按下
    void mouseMoveEvent(QMouseEvent *enent);          // 鼠标移动
    void mouseReleaseEvent(QMouseEvent *event);       // 鼠标释放



  private:
    QHBoxLayout *mainLayout;   // 主布局
    QHBoxLayout *leftLayout;   // 左侧菜单栏布局
    QHBoxLayout *centerLayout; // 中间标题布局
    QHBoxLayout *rightLayout;  // 右侧控制按钮布局

    QMenuBar *menubar; // 工具栏
    QMenu *fileMenu;   // 文件菜单
    QMenu *editMenu;   // 编辑菜单
    QMenu *toolMenu;   // 工具菜单
    QMenu *viewMenu;   // 视图菜单

    QLabel *titleIcon; // 标题图标
    QLabel *title;     // 标题栏内容
    QLabel *textLabel; // 显示内容信息

    QPushButton *minButton;    // 最小化图标按钮
    QPushButton *restorButton; // 还原图标按钮
    QPushButton *maxButton;    // 最大化按钮
    QPushButton *closeButton;  // 关闭按钮

    // 最大化， 最小化变量缓存
    QPoint restorePos;
    QSize restoreSize;

    // 移动窗口的变量
    bool isPressed;
    QPoint startMovePos;


signals:
  // 按钮触发的信号
  void signalButtonMinClicked();
  void signalButtonRestoreClicked();
  void signalButtonMaxClicked();
  void signalButtonCloseClicked();

private slots:
  // 窗口控制按钮，最小化，最大化，还原，关闭触发的槽函数
  void onMinButtonClicked();
  void onRestorButtonClicked();
  void onMaxButtonClicked();
  void onCloseButtonClicked();
  


  private:
    void initUI();                                 // 初始化页面布局组件
    void initBindingSignalSlot();                  // 初始化信号与槽的绑定
    void loadStyleSheet();                         // 加载样式文件
    void initIcon();
};

#endif // TITLEBAR_H
